package cn.zjk.springframework.beans.factory.support;

import cn.zjk.springframework.beans.BeansException;
import cn.zjk.springframework.beans.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * 实例化策略
 * InstantiationStrategy
 */
public interface InstantiationStrategy {
    /**
     * 实例化方法
     * @param beanDefinition BeanDefinition
     * @param beanName bean名称
     * @param constructor lang.reflect.Constructor类 包含一些必要的类信息，可以拿到符合入参信息的构造函数
     * @param args 构造函数的入参信息
     * @return 返回
     * @throws BeansException 自定义异常
     */
    Object instance(BeanDefinition beanDefinition, String beanName, Constructor constructor,Object[] args) throws BeansException;
}
